home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib08.dsk / APPLE BOND MANAGER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  19KB  |  567 lines

  1. 1  REM  **********************
  2. 2  REM  *    BOND MANAGER    *
  3. 3  REM  * BY DOUG SPRINKLE   *
  4. 4  REM  * COPYRIGHT (C) 1982 *
  5. 5  REM  * BY MICRO-SPARC INC *
  6. 6  REM  * LINCOLN, MA. 01773 *
  7. 7  REM  **********************
  8. 100  GOTO 11000
  9. 110  REM 
  10. 120  REM 
  11. 130  REM  THIS ROUTINE CONVERTS
  12. 140  REM  TO XX.XX FORMAT
  13. 150  REM 
  14. 160  REM 
  15. 170  REM 
  16. 180 VV =  INT(VV *TT)
  17. 190 T$ =  STR$(VV):SL =  LEN(T$) -N2
  18. 200  IF SL <P5  THEN T$ = ZZ$ +T$:SL = SL +N2
  19. 210 VV$ =  LEFT$(T$,SL) +PE$ + RIGHT$(T$,N2)
  20. 220  RETURN 
  21. 1000  REM 
  22. 1010  REM  START SORT
  23. 1020  REM 
  24. 1030  FOR SN = N1 TO I
  25. 1040 MX = SN: REM  MAX SUBSCRIPT
  26. 1050 T = X(A,SN)
  27. 1060  FOR SF = SN TO I
  28. 1070  IF X(A,SF) <T  THEN 1090
  29. 1080 T = X(A,SF):MX = SF
  30. 1090  NEXT SF
  31. 1100  IF MX = SN  THEN 1220
  32. 1110  REM 
  33. 1120  REM  SWAP FIELDS
  34. 1130  REM 
  35. 1140  FOR SW = N0 TO NQ
  36. 1150 T = X(SW,SN)
  37. 1160 X(SW,SN) = S(SW,MX)
  38. 1170 X(SW,MX) = T
  39. 1180  NEXT SW
  40. 1190 T$ = BN$(SN)
  41. 1200 BN$(SN) = BN$(MX)
  42. 1210 BN$(MX) = T$
  43. 1220  NEXT SN
  44. 1230  RETURN 
  45. 1240  REM 
  46. 1250  REM  SORT FOR BOND NAME
  47. 1260  REM 
  48. 1270  FOR SN = N1 TO I
  49. 1280 MX = SN:T$ = BN$(SN)
  50. 1290  FOR SF = SN TO I
  51. 1300  IF BN$(SF) >T$  THEN 1320
  52. 1310 T$ = BN$(SF):MX = SF
  53. 1320  NEXT SF
  54. 1330  GOTO 1100
  55. 2000  REM 
  56. 2010  REM 
  57. 2020  REM  THIS ROUTINE DELETES RECORD
  58. 2030  REM 
  59. 2040  CALL  -936: VTAB TW: HTAB 15: FLASH : PRINT "DELETING": NORMAL 
  60. 2050  IF I >P5  THEN 2070
  61. 2060  POP : RETURN 
  62. 2070  FOR MK = N1 TO I
  63. 2080  IF BN$(MK) < >AS$  THEN 2170
  64. 2090  FOR M = MK TO I
  65. 2100 X = M +N1
  66. 2110  FOR MM = N0 TO NQ
  67. 2120 X(MM,M) = X(MM,X)
  68. 2130  NEXT MM
  69. 2140 BN$(M) = BN$(X)
  70. 2150  NEXT M
  71. 2160 I = I -N1
  72. 2165  GOTO 2080
  73. 2170  NEXT MK
  74. 2180 DL = N0
  75. 2190  RETURN 
  76. 3000  REM 
  77. 3010  REM  CALCULATE VALUES
  78. 3020  REM 
  79. 3030  IF DT <P5  THEN  GOSUB 4000
  80. 3040  IF DI <P5  THEN 3070
  81. 3050 JJ = I: CALL  -936: VTAB TW: HTAB 18: FLASH : PRINT "WAIT": NORMAL 
  82. 3060  FOR L = BR TO JJ
  83. 3070 X(N6,L) = X(N2,L)/HU
  84. 3080 MO = (X(N3,L) -CY) *TW +X(N4,L) -CM
  85. 3090 X(N8,L) = ((X(N1,L) -X(N0,L))/X(N0,L))/(MO/TW)
  86. 3100 X(N9,L) = (X(N1,L)/X(N0,L)) *X(N6,L)
  87. 3110 X(N7,L) = X(N9,L) +X(N8,L)
  88. 3120  IF MO >TW  THEN 3140
  89. 3130 X(N9,L) = X(N9,L) +X(N8,L):X(N8,L) = N0
  90. 3140 X(NQ,L) = (N1 -TR) *(X(N9,L) +P5 *X(N8,L)) +P5 *X(N8,L)
  91. 3150  IF DI <P5  THEN  RETURN 
  92. 3160  NEXT L
  93. 3170  RETURN 
  94. 4000  CALL  -936: VTAB TW
  95. 4010  PRINT "  ENTER TODAY'S DATE": PRINT 
  96. 4020  PRINT "  BY MONTH,DAY,YR": PRINT : INPUT "  (E.G.11,3,1981)  ";CM,CD,CY
  97. 4030  PRINT : PRINT : HTAB TW: PRINT MO$(CM);" ";CD;", ";CY
  98. 4040  PRINT : PRINT : PRINT  TAB( 12)"CORRECT (Y/N)?";
  99. 4050  GET A$: IF A$ = NL$  THEN 4050
  100. 4060  IF  LEFT$(A$,N1) < >Y$  THEN 4000
  101. 4070 CM = CM +CD/F30
  102. 4080  CALL  -936
  103. 4090  PRINT : PRINT 
  104. 4100  PRINT "  ENTER YOUR MAXIMUM"
  105. 4110  PRINT : INPUT "  INCREMENTAL TAX RATE ---- ";A$:TR =  VAL(A$): IF TR <P5  THEN  PRINT G$: GOTO 4080
  106. 4120 TR = TR/HU:DT = N1: CALL  -936: FLASH : VTAB TW: HTAB 18: PRINT "WAIT": NORMAL : RETURN 
  107. 4130  RETURN 
  108. 5000  REM 
  109. 5010  REM 
  110. 5020  REM  INPUT DATA FROM
  111. 5030  REM  KEYBOARD ROUTINE
  112. 5040  REM 
  113. 5050  REM 
  114. 5060  CALL  -936:JX = I +N1
  115. 5070  FOR I = JX TO HH
  116. 5080  CALL  -936
  117. 5090  INPUT "    ENTER BOND NAME           ";BN$(I): PRINT 
  118. 5100 BN$(I) =  LEFT$(BN$(I),N5)
  119. 5110  INPUT "    ENTER PURCHASE PRICE   $  ";A$:T =  VAL(A$): IF T <P5  THEN  HTAB N1: VTAB N2: PRINT G$: GOTO 5110
  120. 5120  PRINT :X(N0,I) = T
  121. 5130  INPUT "    ENTER BOND FACE VALUE  $  ";A$:T =  VAL(A$): IF T <P5  THEN  HTAB N1: VTAB N4: PRINT G$: GOTO 5130
  122. 5140  PRINT :X(N1,I) = T
  123. 5150  INPUT "    ENTER INT. RATE ( % )     ";A$:T =  VAL(A$): IF T <P5  THEN  HTAB N1: VTAB N6: PRINT G$: GOTO 5150
  124. 5160  PRINT :X(N2,I) = T
  125. 5170  INPUT "    ENTER DUE DATE ( MO.DAY ) ";A$:A =  VAL(A$)
  126. 5180  IF A =  >NW  OR A <N1  THEN  PRINT G$: HTAB N1: VTAB N9: GOTO 5170
  127. 5190 T = HU *(A - INT(A)): IF T >ND  THEN  PRINT G$: HTAB N1: VTAB N9: GOTO 5170
  128. 5200 X(N4,I) = TD *(A - INT(A)) + INT(A): IF X(N4,I) =  VAL(A$)  THEN X(N4,I) = X(N4,I) +TD/HU
  129. 5210  PRINT 
  130. 5220  INPUT "    ENTER DUE DATE (YR 1982)  ";A$:T =  VAL(A$): IF T <P5  THEN  HTAB N1: VTAB NQ: PRINT G$: GOTO 5220
  131. 5230  IF  LEN(A$) < >N4  THEN  PRINT G$: HTAB N1: VTAB 11: GOTO 5220
  132. 5240 X(N3,I) = T
  133. 5250  PRINT 
  134. 5260  PRINT : PRINT 
  135. 5270 CC = I:L = CC
  136. 5280  GOSUB 10000
  137. 5290  IF NS = N1  THEN NS = N0: GOSUB 3030: RETURN 
  138. 5300  IF NS = N2  THEN NS = N0: CALL  -936: GOTO 5090
  139. 5310  IF NS = N4  THEN NS = N0: CALL  -936: GOSUB 3030: GOTO 5400
  140. 5320  POKE 33,10: POKE 32,30: VTAB N1: HTAB 35: POKE 35,18: REM  SET WINDOW
  141. 5330  CALL  -936: PRINT BN$(I): PRINT : PRINT X(N0,I): PRINT 
  142. 5340  PRINT X(N1,I): PRINT 
  143. 5350  PRINT X(N2,I): PRINT 
  144. 5360 A =  INT(X(N4,I)):T =  INT(HU *(X(N4,I) -A +CO)/TD)
  145. 5370 A$ =  STR$(A):T$ =  STR$(T): IF  LEN(T$) <N2  THEN T$ = "0" +T$
  146. 5380  PRINT A$ +PE$ +T$: PRINT 
  147. 5390  PRINT X(N3,I): PRINT : POKE 33,40: POKE 32,0: POKE 35,24: GOTO 5280
  148. 5400  NEXT I
  149. 5410  RETURN 
  150. 6000  REM 
  151. 6010  REM 
  152. 6020  REM  THIS ROUTINE OUTPUTS
  153. 6030  REM  ANSWERS TO THE SCREEN
  154. 6040  REM 
  155. 6050  REM 
  156. 6060  CALL  -936:KZ = N1
  157. 6070  VTAB 8: PRINT  TAB( 5)"ENTER RECORD NO.": PRINT : INPUT "    <RTN> FOR ALL RECORDS ";A$
  158. 6080 KZ =  VAL(A$): IF KZ <P5  THEN KZ = N1
  159. 6090  IF KZ >I  THEN  RETURN 
  160. 6100  CALL  -936
  161. 6110  PRINT  TAB( N4)"BOND NAME": PRINT : PRINT  TAB( N4)"PURCHASE PRICE  $": PRINT : PRINT  TAB( N4)"BOND FACE VALUE  $": PRINT : PRINT  TAB( N4)"FACE INTEREST (%)": PRINT 
  162. 6120  PRINT  TAB( N4)"DUE DATE (MO-DAY)": PRINT : PRINT  TAB( N4)"DUE DATE ( YEAR )": PRINT : PRINT  TAB( N4)"GROSS YIELD (%)": PRINT : PRINT  TAB( N4)"CAPITAL GN YLD (%)": PRINT 
  163. 6130  PRINT  TAB( N4)"CURRENT YIELD (%)": PRINT : PRINT  TAB( N4)"AFTER TAX YIELD (%)"
  164. 6140  FOR K = KZ TO I
  165. 6150  REM 
  166. 6160  REM  SET WINDOW
  167. 6170  REM 
  168. 6180  HTAB 30: POKE 33,15: POKE 32,24: POKE 35,BM: CALL  -936
  169. 6190 T =  LEN(BN$(K)):S =  ABS(N6 -T)
  170. 6200  PRINT  SPC( S)BN$(K);"  RCD ";K
  171. 6210  PRINT 
  172. 6220 T$ =  STR$(X(N0,K)):T =  LEN(T$):S =  ABS(N6 -T)
  173. 6230  PRINT  SPC( S)T$: PRINT 
  174. 6240 T$ =  STR$(X(N1,K)):T =  LEN(T$):S =  ABS(N6 -T)
  175. 6250  PRINT  SPC( S)T$: PRINT 
  176. 6260 VV = X(N6,K) +C1: GOSUB 180
  177. 6270 T =  LEN(VV$):S =  ABS(N6 -T)
  178. 6280  PRINT  SPC( S)VV$: PRINT 
  179. 6290 A = X(N4,K):B =  INT(A)
  180. 6300 VV$ =  STR$( INT(HU *(A -B +CO)/TD)):S =  ABS(N3 - LEN(VV$))
  181. 6310  PRINT  SPC( S)MO$( INT(X(N4,K)));VV$: PRINT 
  182. 6320  PRINT  SPC( N2)X(N3,K): PRINT 
  183. 6330 VV = X(N7,K) +C1: GOSUB 180
  184. 6340 T =  LEN(VV$):S =  ABS(N6 -T)
  185. 6350  PRINT  SPC( S)VV$
  186. 6360  PRINT 
  187. 6370 VV = X(N8,K) +C1: GOSUB 180
  188. 6380 T =  LEN(VV$):S =  ABS(N6 -T)
  189. 6390  PRINT  SPC( S)VV$
  190. 6400  PRINT 
  191. 6410 VV = X(N9,K) +C1: GOSUB 180
  192. 6420 T =  LEN(VV$):S =  ABS(N6 -T)
  193. 6430  PRINT  SPC( S)VV$
  194. 6440  PRINT 
  195. 6450 VV = X(NQ,K) +C1: GOSUB 180
  196. 6460 T =  LEN(VV$):S =  ABS(N6 -T)
  197. 6470  PRINT  SPC( S)VV$
  198. 6480  REM  RESET WINDOW
  199. 6490  POKE 32,0: POKE 33,40
  200. 6500 CC = K: GOSUB 10000
  201. 6510 BM = 20
  202. 6520  IF NS = N1  THEN NS = N0: GOTO 6600
  203. 6530  IF NS = N4  THEN NS = N0: GOTO 6590
  204. 6540  IF NS = N3  THEN 6570
  205. 6550 BN$(K) = AS$:NS = N0:DL = N1: REM  SET DELETE FLAG
  206. 6560  GOTO 6590
  207. 6570 NS = N0:N = CC:L = CC
  208. 6580  GOSUB 3070:SC = N0: GOTO 6180
  209. 6590  NEXT K
  210. 6600 BM = 24: IF DL >P5  THEN  GOSUB 2000:DL = N0
  211. 6610  RETURN 
  212. 7000  REM 
  213. 7010  REM  PRINTER OUTPUT
  214. 7020  REM 
  215. 7030  CALL  -936
  216. 7040  INPUT "PRINT RESULTS? (Y/N) <RET>  ";A$
  217. 7050  PRINT 
  218. 7060  IF  LEFT$(A$,N1) < >Y$  THEN  RETURN 
  219. 7070  PRINT "TURN ON PRINTER AND": PRINT 
  220. 7080  INPUT "ENTER PRINTER SLOT NUMBER <RET>  ";A$:N =  VAL(A$)
  221. 7090  IF N <N1  OR N >N7  THEN  PRINT G$: GOTO 7030
  222. 7100  CALL  -936: VTAB 7: PRINT "ENTER FIRST RECORD NO. OR": INPUT "PUSH <RET> FOR FIRST RECORD - ";A$: PRINT 
  223. 7110  IF A$ = NL$  THEN KK = 1: GOTO 7130
  224. 7120 KK =  VAL(A$)
  225. 7130  IF KK <P5  THEN KK =  ON 
  226. 7140  PRINT "ENTER LAST RECORD NO. OR": INPUT "PUSH <RET> FOR LAST RECORD - ";A$
  227. 7150  IF A$ = NL$  THEN LR = I: GOTO 7170
  228. 7160 LR =  VAL(A$)
  229. 7170  CALL  -936: PRINT  TAB( 6)"PUSH ' S ' TO HALT PRINTING": VTAB 4: HTAB 1: POKE 34,3: PR# N
  230. 7180  REM  THIS ROUTINE OUTPUTS TO PRINTER
  231. 7190 KN = KK +6: IF KN >LR  THEN KN = LR
  232. 7200  PRINT  CHR$(NW): PRINT  SPC( 15)"*** BOND YIELD CALCULATIONS ***": PRINT 
  233. 7210 T =  INT(TR *HU +.5)
  234. 7220  PRINT  SPC( 20)"** TAX RATE ";T;" % **": PRINT 
  235. 7230  PRINT "RECORD NO.     ";
  236. 7240  FOR K = KK TO KN
  237. 7250 T$ =  STR$(K):T =  LEN(T$):S = N8 -T
  238. 7260  PRINT  SPC( S)T$;
  239. 7270  NEXT K
  240. 7280  PRINT  CHR$(NW)
  241. 7290  GOSUB 8030
  242. 7300  PRINT "BOND NAME      ";
  243. 7310  FOR K = KK TO KN
  244. 7320  IF  LEN(BN$(K)) >N8  THEN BN$(K) =  LEFT$(BN$(K),N8)
  245. 7330 T =  LEN(BN$(K)):S =  ABS(N8 -T)
  246. 7340  PRINT  SPC( S)BN$(K);
  247. 7350  NEXT K
  248. 7360  PRINT  CHR$(NW)
  249. 7370  GOSUB 8030
  250. 7380  PRINT "PURCHASE PRICE ";
  251. 7390  FOR K = KK TO KN
  252. 7400 T$ =  STR$(X(0,K)):T =  LEN(T$):S = N8 -T
  253. 7410  PRINT  SPC( S)T$;
  254. 7420  NEXT K: PRINT  CHR$(NW)
  255. 7430  GOSUB 8030
  256. 7440  PRINT "FACE VALUE     ";
  257. 7450  FOR K = KK TO KN
  258. 7460 T$ =  STR$(X(N1,K)):T =  LEN(T$):S = N8 -T: PRINT  SPC( S)T$;: NEXT K
  259. 7470  PRINT  CHR$(NW)
  260. 7480  GOSUB 8030
  261. 7490  PRINT "MONTH DUE DATE ";
  262. 7500  FOR K = KK TO KN
  263. 7510 T = X(N4,K):A =  INT(T):T$ = MO$(A)
  264. 7520 VV$ =  STR$( INT(HU *(T -A +CO)/TD)):T =  LEN(VV$):S = N5 -T
  265. 7530  PRINT  SPC( S)T$;VV$;
  266. 7540  NEXT K
  267. 7550  PRINT  CHR$(NW)
  268. 7560  GOSUB 8030
  269. 7570  PRINT "YEAR DUE DATE  ";
  270. 7580  FOR K = KK TO KN
  271. 7590 T$ =  STR$(X(3,K)):S = 4
  272. 7600  PRINT  SPC( S)T$;
  273. 7610  NEXT K
  274. 7620  PRINT  CHR$(NW)
  275. 7630  GOSUB 8030
  276. 7640  PRINT "FACE INTEREST  ";
  277. 7650  FOR K = KK TO KN
  278. 7660 VV = X(N6,K) +C1: GOSUB 180:T =  LEN(VV$):S =  ABS(N8 -T)
  279. 7670  PRINT  SPC( S)VV$;
  280. 7680  NEXT K
  281. 7690  PRINT  CHR$(NW)
  282. 7700  GOSUB 8030
  283. 7710  PRINT "GROSS YIELD    ";
  284. 7720  FOR K = KK TO KN
  285. 7730 VV = X(N7,K) +C1: GOSUB 180:T =  LEN(VV$):S =  ABS(N8 -T)
  286. 7740  PRINT  SPC( S)VV$;
  287. 7750  NEXT K
  288. 7760  PRINT  CHR$(NW)
  289. 7770  GOSUB 8030
  290. 7780  PRINT "CAPITAL GN YLD ";
  291. 7790  FOR K = KK TO KN
  292. 7800 VV = X(N8,K) +C1: GOSUB 180:T =  LEN(VV$):S =  ABS(N8 -T)
  293. 7810  PRINT  SPC( S)VV$;
  294. 7820  NEXT K
  295. 7830  PRINT  CHR$(NW)
  296. 7840  GOSUB 8030
  297. 7850  PRINT "CURRENT YIELD  ";
  298. 7860  FOR K = KK TO KN
  299. 7870 VV = X(N9,K) +C1: GOSUB 180:T =  LEN(VV$):S =  ABS(N8 -T)
  300. 7880  PRINT  SPC( S)VV$;
  301. 7890  NEXT K
  302. 7900  PRINT  CHR$(NW)
  303. 7910  PRINT "AFTER TAX YIELD";
  304. 7920  FOR K = KK TO KN
  305. 7930 VV = X(NQ,K) +C1: GOSUB 180:T =  LEN(VV$):S =  ABS(N8 -T)
  306. 7940  PRINT  SPC( S)VV$;
  307. 7950  NEXT K
  308. 7960  PRINT  CHR$(NW)
  309. 7970  IF KN > = LR  THEN 8070
  310. 7980 KK = KK +7:KN = KK +6
  311. 7990  IF KN >LR  THEN KN = LR
  312. 8000  PRINT : PRINT 
  313. 8010  GOTO 7200
  314. 8020  REM  KEY DEPRESS SENSE
  315. 8030 B =  PEEK( -16384): POKE  -16368,0: IF B <127  THEN  RETURN 
  316. 8040  IF B = 211  THEN  POP : GOTO 8070
  317. 8050  RETURN 
  318. 8060  REM  RESET WINDOW AND RECONNECT DOS
  319. 8070  POKE 34,0: CALL  -375: CALL  -365: CALL 1002: RETURN 
  320. 10000  REM 
  321. 10010  REM 
  322. 10020  REM  EDIT ROUTINE
  323. 10030  REM 
  324. 10040 NS = 0: POKE 35,24: REM  RESET BOT MAR
  325. 10050  VTAB 21: HTAB 25: PRINT "R  RTN TO MENU"
  326. 10060  VTAB 22: HTAB 25: PRINT "D  DELETE RCD"
  327. 10070  VTAB 23: HTAB 25: PRINT "E  EDIT RCD"
  328. 10080  VTAB 24: HTAB 24: PRINT "RTN NEXT RCD";
  329. 10090  HTAB 1
  330. 10100  POKE 33,20: POKE 32,0: POKE 34,22
  331. 10110  GET A$: IF A$ = NL$  THEN 10110
  332. 10120  IF A$ < >"R"  THEN 10150
  333. 10130  POKE 33,40: POKE 32,0: POKE 34,0
  334. 10140 NS = 1: RETURN 
  335. 10150  IF A$ < >"D"  THEN 10180
  336. 10160  POKE 33,40: POKE 32,0: POKE 34,0
  337. 10170 NS = 2: RETURN 
  338. 10180  IF A$ < >"E"  THEN 10210
  339. 10190  POKE 33,40: POKE 32,0: POKE 34,0
  340. 10200 NS = 3: GOTO 10250
  341. 10210  IF A$ =  CHR$(NW)  THEN 10230
  342. 10220  PRINT G$: GOTO 10110
  343. 10230  POKE 33,40: POKE 32,0: POKE 34,0
  344. 10240 NS = 4: RETURN 
  345. 10250  REM 
  346. 10260  REM 
  347. 10270  REM  EDIT ROUTINE
  348. 10280  REM 
  349. 10290  REM  SET WINDOW
  350. 10300  POKE 33,3
  351. 10310  CALL  -936: PRINT "1 -"
  352. 10320  PRINT "2 -"
  353. 10330  PRINT "3 -"
  354. 10340  PRINT "4 -"
  355. 10350  PRINT "5 -"
  356. 10360  PRINT "6 -": VTAB 23: HTAB 1
  357. 10370  POKE 33,40: REM  RESET WINDOW
  358. 10380  POKE 33,20: POKE 32,0: POKE 34,21
  359. 10390  REM 
  360. 10400  CALL  -936: PRINT "ENTER FIELD NO."
  361. 10410  GET A$: IF  VAL(A$) <P5  OR  VAL(A$) >6.5  THEN  PRINT G$: GOTO 10400
  362. 10420 A =  VAL(A$)
  363. 10430  CALL  -936
  364. 10440  PRINT "ENTER NEW       ": PRINT EF$(A);" ";: INPUT A$
  365. 10450  IF A = 1  THEN BN$(CC) =  LEFT$(A$,N5): GOTO 10570
  366. 10460  IF  VAL(A$) = N0  THEN  PRINT G$: GOTO 10390
  367. 10470  IF A = N2  THEN X(N0,CC) =  VAL(A$): GOTO 10570
  368. 10480  IF A = N3  THEN X(N1,CC) =  VAL(A$): GOTO 10570
  369. 10490  IF A = N4  THEN X(N2,CC) =  VAL(A$): GOTO 10570
  370. 10500  IF A < >N5  THEN 10550
  371. 10510 A =  VAL(A$): IF A <P5  OR A > = NW  THEN  PRINT G$: GOTO 10390
  372. 10520 T = HU *(A - INT(A)): IF T >ND  THEN  PRINT G$: GOTO 10390
  373. 10530 X(N4,CC) = TD *(A - INT(A)) + INT(A): IF X(N4,CC) =  VAL(A$)  THEN X(N4,CC) = X(N4,CC) +TD/HU
  374. 10540  GOTO 10570
  375. 10550  IF A = N6  AND  LEN(A$) < >N4  THEN  PRINT G$: GOTO 10390
  376. 10560 X(N3,CC) =  VAL(A$): GOTO 10570
  377. 10570  CALL  -936: POKE 33,3: POKE 34,0: CALL  -936: POKE 33,40: RETURN 
  378. 11000  REM 
  379. 11010 EF$(1) = "BOND NAME"
  380. 11020 EF$(2) = "PUR PRICE"
  381. 11030 EF$(3) = "FACE VALUE"
  382. 11040 EF$(4) = "INTER RATE"
  383. 11050 EF$(5) = "DUE DATE(MO)"
  384. 11060 EF$(6) = "DUE DATE(YR)"
  385. 11070  REM  BN$  =BOND NAME
  386. 11080  REM  X(6,X)=BOND INTEREST RATE
  387. 11090  REM  X(7,X)=GROSS YIELD
  388. 11100  REM  X(8,X)=CAPITAL GAIN YIELD
  389. 11110  REM  X(9,X)=CURRENT YIELD
  390. 11120  REM  X(10,X)=REAL YIELD
  391. 11130  REM  X(0,X)=BOND PRICE
  392. 11140  REM  X(N1,X)=BOND FACE VALUE
  393. 11150  REM  X(2,X)=BOND INTEREST
  394. 11160  REM  X(3,X)=DUE DATE (YR)
  395. 11170  REM  X(4,X)=DUE DATE (MO)
  396. 11180 TT = 10000:HU = 100:ZZ$ = "00":PE$ = ".":TW = 12:P5 = .4:AS$ = "***":N0 = 0:N1 = 1:Y$ = "Y":ST$ = "**":NL$ = "":ND = 31: REM  P5 HAS BEEN CHANGED TO .4 - CAPITAL GAIN RATE IS NOW 40%
  397. 11190 N5 = 5:N2 = 2:N3 = 3:N4 = 4:F30 = 30:HH = 200:N6 = 6:N7 = 7:N8 = 8:N9 = 9:NQ = 10:NW = 13:BM = 24:TD = 3.3333:CO = .005:C1 = .00005
  398. 11200 G$ = "<CTRL-G>": REM  G$ = <CONTROL> G
  399. 11210  DIM BN$(200),MO$(12),X(10,200),EC$(15)
  400. 11220  GOSUB 17000
  401. 11230  REM 
  402. 11240  REM 
  403. 11250  REM 
  404. 11260  REM  MENUE
  405. 11270  REM 
  406. 11280  REM 
  407. 11290  CALL  -936
  408. 11300  PRINT  SPC( 14)"*** MENUE ***": PRINT : PRINT 
  409. 11310  PRINT  TAB( N5)"1 - ENTER DATA FROM KBD": PRINT 
  410. 11320  PRINT  TAB( N5)"2 - LOAD DATA FROM DISC": PRINT 
  411. 11330  PRINT  TAB( N5)"3 - SAVE DATA TO DISC": PRINT 
  412. 11340  PRINT  TAB( N5)"4 - DISPLAY/EDIT DATA": PRINT 
  413. 11350  PRINT  TAB( N5)"5 - PRINT RESULTS": PRINT 
  414. 11360  PRINT  TAB( N5)"6 - CHANGE TAX RATE": PRINT 
  415. 11370  PRINT  TAB( N5)"7 - SORT": PRINT 
  416. 11380  POKE 36,N5 -1: PRINT "8 - END";: HTAB 27: PRINT I;" ";: INVERSE : PRINT "RECORDS": NORMAL : PRINT : PRINT 
  417. 11390  PRINT  TAB( N8)"ENTER SELECTION ";
  418. 11400  HTAB 1: VTAB 24: POKE 34,23
  419. 11410  GET A$: IF A$ = NL$  THEN 11410
  420. 11420 A =  VAL(A$)
  421. 11430  IF A >P5  AND A <8.5  THEN 11450
  422. 11440  PRINT G$: GOTO 11410
  423. 11450  POKE 34,0
  424. 11460  ON A GOSUB 5060,14000,15000,6060,7030,12000,13000,11480
  425. 11470  GOTO 11230
  426. 11480  PRINT : PRINT "      ARE YOU SURE? (Y/N)"
  427. 11490  GET A$: IF A$ = NL$  THEN 11490
  428. 11500  IF A$ < >Y$  THEN 11230
  429. 11510  END 
  430. 12000  REM 
  431. 12010  REM  THIS ROUTINE RESETS
  432. 12020  REM  THE TAX RATE AND
  433. 12030  REM  RECALCULATES
  434. 12040  CALL  -936: VTAB 12:MD = 1
  435. 12050  GOSUB 4090:DI = 1:BR = N1: GOSUB 3030
  436. 12060 DI = 0: RETURN 
  437. 13000  REM 
  438. 13010  REM 
  439. 13020  REM  SORT ROUTINE
  440. 13030  REM 
  441. 13040  REM 
  442. 13050  CALL  -936
  443. 13060 VS(N0) = N0:VS(N1) = N6:VS(N2) = N7:VS(N3) = N8:VS(N4) = N9:VS(N5) = NQ:VS(N6) = N0:NS(N7) = N1:VS(N8) = N3:VS(N9) = N4
  444. 13070  PRINT  TAB( 10)"*** SORT ROUTINE ***": PRINT : PRINT 
  445. 13080  PRINT  TAB( N5)"0 - BOND NAME"
  446. 13090  PRINT  TAB( N5)"1 - BOND INTEREST"
  447. 13100  PRINT  TAB( N5)"2 - GROSS YIELD"
  448. 13110  PRINT  TAB( N5)"3 - CAPITAL GAIN YIELD"
  449. 13120  PRINT  TAB( N5)"4 - CURRENT YIELD"
  450. 13130  PRINT  TAB( N5)"5 - AFTER TAX YIELD"
  451. 13140  PRINT  TAB( N5)"6 - BOND PURCHASE PRICE"
  452. 13150  PRINT  TAB( N5)"7 - BOND FACE VALUE"
  453. 13160  PRINT  TAB( N5)"8 - BOND DUE DATE(YR)"
  454. 13170  PRINT  TAB( N5)"9 - BOND DUE DATE(MO)": PRINT 
  455. 13180  PRINT  TAB( N3)"<RET> - RETURN TO MENUE": PRINT : PRINT 
  456. 13190  PRINT  TAB( 5)"ENTER SORT FIELD";
  457. 13200  GET A$: IF A$ = NL$  THEN 13200
  458. 13210  IF A$ =  CHR$(NW)  THEN  RETURN 
  459. 13220  IF A$ = "0"  THEN A = 0: GOTO 13240
  460. 13230 A =  VAL(A$): IF A <P5  OR A >9.5  THEN  PRINT G$: GOTO 13190
  461. 13240  CALL  -936: VTAB TW: HTAB 16: FLASH : PRINT "SORTING": NORMAL 
  462. 13250  IF A = N0  THEN 1270
  463. 13260 A = VS(A)
  464. 13270  GOTO 1000
  465. 14000  ONERR  GOTO 16000
  466. 14010  REM 
  467. 14020  REM  THIS ROUTINE LOADS DATA
  468. 14030  REM  FROM FILE 'BONDDATA'
  469. 14040  CALL  -936: FOR J = N1 TO N8: PRINT G$: NEXT J
  470. 14050  VTAB 11: PRINT  TAB( 12)"INSERT DATA DISK"
  471. 14060  VTAB 13: HTAB 12: INPUT "AND PRESS RETURN";A$
  472. 14070 D$ =  CHR$(4):BR = N1:JJ = N0: CALL  -936: VTAB TW: IF I <P5  THEN 14130
  473. 14080  PRINT "APPEND TO EXISTING FILE? (Y/N) ";
  474. 14090  GET A$: IF A$ = NL$  THEN 14090
  475. 14100  IF  LEFT$(A$,N1) < >Y$  THEN I = N0:BR = N1: GOTO 14120
  476. 14110 JJ = I:BR = I
  477. 14120  PRINT : PRINT 
  478. 14130  PRINT "ENTER FILE IDENTIFIER "
  479. 14140  PRINT : PRINT "OR PRESS 'C' FOR CATALOG"
  480. 14150  PRINT : PRINT "OR 'M' TO RETURN TO MENUE  ";
  481. 14160  GET FF$: IF FF$ = NL$  THEN 14160
  482. 14170  IF FF$ = "M"  THEN  RETURN 
  483. 14180  IF FF$ < >"C"  THEN 14240
  484. 14190  PRINT " ": CALL  -936
  485. 14200  PRINT D$;"CATALOG"
  486. 14210  PRINT : PRINT "PRESS ANY KEY TO CONTINUE":
  487. 14220  GET A$: IF A$ = NL$  THEN 14220
  488. 14230  GOTO 14000
  489. 14240  CALL  -936: VTAB TW: HTAB TW: NORMAL 
  490. 14250  PRINT "READING BOND DATA";FF$
  491. 14260  PRINT D$;"OPEN BONDDATA";FF$
  492. 14270  PRINT D$;"READ BONDDATA";FF$
  493. 14280  INPUT KK
  494. 14290 I = I +KK
  495. 14300  IF I >HH  THEN I = HH
  496. 14310  FOR J = JJ +N1 TO I
  497. 14320  INPUT BN$(J)
  498. 14330  INPUT X(N0,J)
  499. 14340  INPUT X(N1,J)
  500. 14350  INPUT X(N2,J)
  501. 14360  INPUT X(N4,J)
  502. 14370  INPUT X(N3,J)
  503. 14380  NEXT J
  504. 14390  PRINT D$;"CLOSE BONDDATA";FF$
  505. 14400 DI = N1: GOSUB 3030:DI = N0: RETURN : REM  CALCULATE RESULTS
  506. 15000  ONERR  GOTO 16000
  507. 15010  REM 
  508. 15020  REM  THIS ROUTINE SAVES DATA
  509. 15030  REM  TO FILE 'BONDDATA'
  510. 15040  REM 
  511. 15050  IF I >P5  THEN 15090
  512. 15060  CALL  -936: VTAB 11: PRINT  TAB( 12)"NO DATA IN MEMORY"
  513. 15070  VTAB 13: HTAB 14: INPUT "PRESS RETURN";A$
  514. 15080  RETURN 
  515. 15090  CALL  -936: FOR J = N1 TO N8: PRINT G$: NEXT J
  516. 15100  VTAB 11: PRINT  TAB( 12)"INSERT DATA DISK"
  517. 15110  VTAB 13: HTAB 12: INPUT "AND PRESS RETURN";A$
  518. 15120  CALL  -936: VTAB TW: HTAB TW
  519. 15130  PRINT "ENTER FILE NUMBER ";
  520. 15140  GET FF$: IF FF$ = NL$  THEN 15140
  521. 15150  REM 
  522. 15160  CALL  -936: VTAB TW: HTAB TW: NORMAL 
  523. 15170  PRINT "WRITING BOND DATA";FF$
  524. 15180 D$ =  CHR$(4)
  525. 15190  PRINT D$;"OPEN BONDDATA";FF$
  526. 15200  PRINT D$;"DELETE BONDDATA";FF$
  527. 15210  PRINT D$;"OPEN BONDDATA";FF$
  528. 15220  PRINT D$;"WRITE BONDDATA";FF$
  529. 15230  PRINT I
  530. 15240  FOR J = N1 TO I
  531. 15250  PRINT BN$(J)
  532. 15260  PRINT X(N0,J)
  533. 15270  PRINT X(N1,J)
  534. 15280  PRINT X(N2,J)
  535. 15290  PRINT X(N4,J)
  536. 15300  PRINT X(N3,J)
  537. 15310  NEXT J
  538. 15320  PRINT D$;"CLOSE BONDDATA";FF$
  539. 15330  NORMAL 
  540. 15340  RETURN 
  541. 16000  REM 
  542. 16010  REM 
  543. 16020  REM  ERROR ROUTINE
  544. 16030  REM 
  545. 16040  REM 
  546. 16050 EC =  PEEK(222)
  547. 16060  GOTO 16160
  548. 16070  CALL  -936: FOR T = N1 TO N8: PRINT G$: NEXT T
  549. 16090  VTAB 12: PRINT " *** DISK ERROR ***"
  550. 16130  PRINT : PRINT EC$(EC)
  551. 16140  PRINT : INPUT "PUSH RETURN TO CONTINUE";A$
  552. 16150  GOTO 11230
  553. 16160 EC$(1) = "LANGUAGE NOT AVAILABLE"
  554. 16170 EC$(4) = "WRITE PROTECTED"
  555. 16180 EC$(5) = "END OF DATA"
  556. 16190 EC$(6) = "FILE NOT FOUND"
  557. 16200 EC$(8) = "I/O ERROR"
  558. 16210 EC$(9) = "DISK FULL"
  559. 16220 EC$(10) = "FILE LOCKED"
  560. 16230 EC$(11) = "SYNTAX ERROR"
  561. 16240  GOTO 16070
  562. 17000 T$ = "JANFEBMARAPRMAYJUNJLYAUGSEPOCTNOVDEC"
  563. 17010 T =  -N2
  564. 17020  FOR J = N1 TO TW
  565. 17030 T = T +N3
  566. 17040 MO$(J) =  MID$ (T$,T,N3)
  567. 17050  NEXT J: RETURN